1
Il paradosso delle prestazioni: Perché il codice corretto è lento
AI023Lesson 6
00:00

Il Paradosso delle prestazioni afferma che un kernel matematicamente perfetto, come $out = x + y$, può effettivamente eseguirsi peggio di un ciclo CPU se non riesce a ripartire i costi fissi dell'hardware GPU. Ciò si manifesta spesso nel Tassa di avvio.

1. L'errore della "correttezza"

La correttezza funzionale non è un indicatore di efficienza. Anche se il tuo codice Triton distribuisce correttamente il lavoro su migliaia di thread, se l'intero carico di lavoro (N) è piccolo, la GPU rimane sottoutilizzata. L'hardware trascorre più tempo nelle transizioni di stato che nell'esecuzione effettiva delle operazioni aritmetiche.

2. L'inghippo della misurazione in Python

Effettuare benchmark del codice GPU da Python usando time.time() è pericoloso. Le chiamate GPU sono asincrone; Python semplicemente accoda il comando e prosegue. Senza torch.cuda.synchronize(), misuri il tempo di accodamento. Con la sincronizzazione, misuri il latenza Host-to-Device, che spesso è 10 volte superiore all'esecuzione del kernel stesso.

Overhead di Python/Driver (Tassa di avvio)KernelTempo (ms)

3. Latenza vs. Throughput

Per superare il paradosso, devi fornire un carico sufficiente per "nascondere" la latenza di avvio. Si tratta della transizione da un regime a latenza limitata regime (limitato dal bus CPU-GPU) a un regime a throughput limitato regime (limitato dalla memoria o dal calcolo GPU).

main.py
TERMINALbash — 80x24
> Ready. Click "Run" to execute.
>